﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Tecnopez.Globals;
using BussinessLogicTecnoPez.Produccion.Producto;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;

public partial class ABMProductos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            SetMode(PageMode.ListMode);
        }

        TPPEspecie.ObjType = typeof(Especie);
        TPPUnidadMedida.ObjType = typeof(UnidadMedida);

        InicializarValidadores();
        InicializarGrilla();

        cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/empleados.gif";
        master.Titulo = "Gestión de Productos";
        cargarGrilla();
        _lblError.Text = "";
    }
    private void InicializarValidadores()
    {
        PPVNombre.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Producto.Producto";
        PPVNombre.ControlToValidate = "txtNombre";
        PPVNombre.PropertyName = "Nombre";
        PPVNombre.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVCodigo.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Producto.Producto";
        PPVCodigo.ControlToValidate = "txtCodigo";
        PPVCodigo.PropertyName = "Codigo";
        PPVCodigo.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVUnidadMedida.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Producto.Producto";
        PPVUnidadMedida.ControlToValidate = "txtCodigo";
        PPVUnidadMedida.PropertyName = "UnidadMedida";
        PPVUnidadMedida.DisplayMode = ValidationSummaryDisplayMode.List;
    }
    private void InicializarGrilla()
    {
        grdProductos.setupGrid<Producto>(cargarGrilla, seleccionarProducto, null, true, this.ViewState);
    }

    private void seleccionarProducto(int o)
    {
        int IdProducto = int.Parse(grdProductos.grdDatosAbmView.DataKeys[o].Value.ToString());
        Producto.getManager.ClearFilters();
        Producto.getManager.AddFilter("IDPRODUCTO", GenericManager<Producto>.filterOperator.Equals, IdProducto);
        Producto objProducto = Producto.getManager.GetOne();
        txtId.Text = objProducto.IdProducto.ToString();
        txtCodigo.Text = objProducto.Codigo.Trim();
        txtNombre.Text = objProducto.Nombre.Trim();
        txtDescripcion.Text = objProducto.Descripcion.Trim();
        txtPrecioMayorista.Text = objProducto.PrecioMayorista.ToString();
        txtPrecioMinorista.Text = objProducto.PrecioMinorista.ToString();
        TPPEspecie.ItemSelected = objProducto.Especie;
        TPPUnidadMedida.ItemSelected = objProducto.UnidadMedida;

        SetMode(PageMode.ViewMode);
    }

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                wzrABM.ActiveStepIndex = 1;
                txtId.Enabled = false;
                txtNombre.Enabled = true;
                txtPrecioMayorista.Enabled = true;
                txtPrecioMinorista.Enabled = true;
                txtDescripcion.Enabled = true;
                txtCodigo.Enabled = true;
                TPPEspecie.Enable = true;
                TPPUnidadMedida.Enable = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.EditMode:
                wzrABM.ActiveStepIndex = 1;
                txtId.Enabled = false;
                txtNombre.Enabled = true;
                txtPrecioMayorista.Enabled = true;
                txtPrecioMinorista.Enabled = true;
                txtDescripcion.Enabled = true;
                txtCodigo.Enabled = true;
                TPPEspecie.Enable = true;
                TPPUnidadMedida.Enable = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.ViewMode:
                wzrABM.ActiveStepIndex = 1;
                txtId.Enabled = false;
                txtNombre.Enabled = false;
                txtPrecioMayorista.Enabled = false;
                txtPrecioMinorista.Enabled = false;
                txtDescripcion.Enabled = false;
                txtCodigo.Enabled = false;
                TPPEspecie.Enable = false;
                TPPUnidadMedida.Enable = false;
                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;
                break;
        }

    }

    private void cargarGrilla()
    {
        Producto.getManager.ClearFilters();
        Producto.getManager.ClearOrders();
        Producto.getManager.AddFilter("Nombre", GenericManager<Producto>.filterOperator.Like, "%" + txtBuscarNombre.Text.Trim() + "%");
        Producto.getManager.AddFilter("Codigo", GenericManager<Producto>.filterOperator.Like, "%" + txtBuscarCodigo.Text.Trim() + "%");

        if (ViewState["orden"] == null)
        {
            Producto.getManager.AddOrder("IdProducto", GenericManager<Producto>.Order.orderDirection.DESC);
        }
        else
        {
            Producto.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<Producto>.Order.orderDirection)ViewState["ordenDireccion"]);
        }

        List<Producto> lista = new List<Producto>();
        lista = Producto.getManager.GetFilter();
        grdProductos.grdDatosAbmView.DataSource = lista;
        grdProductos.grdDatosAbmView.DataBind();

    }
    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        txtId.Text = "";
        txtCodigo.Text = "";
        txtDescripcion.Text = "";
        txtNombre.Text = "";
        txtPrecioMayorista.Text = "";
        txtPrecioMinorista.Text = "";
        TPPUnidadMedida.ItemSelected = null;
        TPPEspecie.ItemSelected = null;
        SetMode(PageMode.NewMode);
    }
    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
    }
    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            Producto objProducto = new Producto();
            objProducto.IdProducto = int.Parse(this.txtId.Text.Trim());
            if (Producto.getManager.Delete(objProducto) < 1)
            {
                throw Producto.getManager.GeneratedException;
            }

            SetMode(PageMode.ListMode);
            cargarGrilla();
        }
        catch (Exception ex)
        {
            _lblError.Text = ex.Message;
        }        
    }
    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            Producto objProducto = new Producto();

            objProducto.Nombre = txtNombre.Text.Trim();
            objProducto.Codigo = txtCodigo.Text.Trim();
            objProducto.Descripcion = txtDescripcion.Text.Trim();
            objProducto.Especie = TPPEspecie.ItemSelected as Especie;
            objProducto.UnidadMedida = TPPUnidadMedida.ItemSelected as UnidadMedida;

            if (validar(objProducto))
            {
                decimal aux;
                if (!decimal.TryParse(txtPrecioMinorista.Text.Trim(), out aux))
                {
                    _lblError.Text = "Precio minorista debe ser un número mayor a cero";
                    return;
                }
                if (!decimal.TryParse(txtPrecioMayorista.Text.Trim(), out aux))
                {
                    _lblError.Text = "Precio mayorista debe ser un número mayor a cero";
                    return;
                }

                objProducto.PrecioMayorista = decimal.Parse(txtPrecioMayorista.Text.Trim());
                objProducto.PrecioMinorista = decimal.Parse(txtPrecioMinorista.Text.Trim());

                if (getMode() == PageMode.NewMode)
                {
                    if (Producto.getManager.Insert(objProducto) != true)
                    {
                        throw Producto.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ListMode);
                    cargarGrilla();
                }
                else
                {
                    objProducto.IdProducto = int.Parse(txtId.Text.Trim());
                    if (Producto.getManager.Update(objProducto) != true)
                    {
                        throw Producto.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ViewMode);
                }
            }
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
        }
    }
    private bool validar(Producto objeto)
    {
        ValidationResults v = Validation.Validate<Producto>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;

    }
    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }
    protected void PPVUnidadMedida_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPUnidadMedida.ItemSelected == null)
            e.ConvertedValue = null;
        else
            e.ConvertedValue = TPPUnidadMedida.ItemSelected.ToString();
    }
}